package com.study.experiment08.action;

import com.opensymphony.xwork2.ActionSupport;
import com.study.experiment08.model.User;
import com.study.experiment08.service.IUserService;
import org.apache.struts2.interceptor.ServletRequestAware;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * @author WS
 */
public class UserManagementAction extends ActionSupport implements
        ServletRequestAware {
    private IUserService service;
    private User user;
    private String message;
    HttpServletRequest request;
    private List<User> list = null;
    private String oldpassword;
    private String password;
    private static final long serialVersionUID = 1L;

    //注入service
    public void setService(IUserService service) {
        this.service = service;
    }

    @Override
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }

    /**
     * 注册（添加）新用户 规则：（1）使用该Action方法的用户必须先登录,且用户为Admin； (2)输入口令不一致，添加新用户失败
     *
     * @return
     */
    public String register() {
        System.out.println("======register======");
        if (!password.trim().equals(user.getPassword().trim())) {
            setMessage("输入口令不一致，添加新用户失败!");
            return ERROR;
        }
        if (service.addUser(user)) {
            setMessage("添加新用户成功!");
            return SUCCESS;
        } else {
            setMessage("添加新用户失败!");
            return ERROR;
        }
    }

    /**
     * 查找指定用户（登录）
     */
    public String logon() {
        System.out.println("======UserName=" + user.getUsername());
        if (service.findUser(user)) {
            setMessage("用户登录成功!");
            HttpSession session = request.getSession();
            session.setAttribute("LOGONUSER", user);
            return SUCCESS;
        } else {
            setMessage("用户登录失败!");
            return ERROR;
        }
    }

    /**
     * 查找指定用户
     */
    public String find() {
        user = service.findUser(user.getId());
        System.out.println("======find======" + user.getId());
        if (user != null) {
            setMessage("查找指定用户成功!");
            return SUCCESS;
        } else {
            setMessage("查找指定用户失败!");
        }
        return ERROR;
    }

    /**
     * 列表所有用户，用户登录后才可以使用本方法
     */
    public String list() {
        System.out.println("===＝＝list＝＝＝＝＝");
        if (!isLogon()) {
            setMessage("用户必须登录后才能进行该操作!");
            return ERROR;
        }
        list = service.findAllUser();
        request.setAttribute("UserList", list);
        return SUCCESS;
    }

    /**
     * 更新用户资料 规则：（1）使用该Action方法的用户必须先登录； （2）如果用户没有输入新口令，则默认为不修改口令；
     * （3）如果输入的两次口令不一致，则更新失败 （4）Admin用户（id=1001）资料更新操作的限制，用户名不能更改
     */
    public String update() {
        System.out.println("======Update＝====");
        if (!isAdmin()) {
            setMessage("必须是管理员用户才能进行该操作!");
            return ERROR;
        }
        if ((user.getId() == 1001) && !user.getUsername().equals("Admin")) {
            setMessage("Admin用户的用户名不能更改，更新资料失败!");
            return ERROR;
        }
        if (user.getPassword().trim().length() == 0) {
            // 如果用户没有输入新口令，则默认为不修改口令，使用原口令；
            user.setPassword(oldpassword);
        } else if (!password.trim().equals(user.getPassword().trim())) {
            setMessage("输入口令不一致，更新资料失败!");
            return ERROR;
        }
        if (service.updateUser(user.getId(), user)) {
            setMessage("用户资料更新成功!");
            return SUCCESS;
        } else {
            setMessage("用户资料更新失败!");
        }
        return ERROR;
    }

    /**
     * 删除指定用户资料，需要加上对Admin用户删除操作的限制，如该用户不能删除。 Admin用户（id=1001）
     */
    public String delete() {
        System.out.println("===delete＝");
        if (!isAdmin()) {
            setMessage("必须是管理员用户才能进行该操作!");
            return ERROR;
        }
        if (user.getId() == 1001) {
            setMessage("Admin用户资料不能删除!失败!");
            return ERROR;
        }
        if (service.deleteUser(user.getId())) {
            setMessage("用户资料删除成功!");
            return SUCCESS;
        } else {
            setMessage("用户资料删除失败!");
        }
        return ERROR;
    }

    /**
     * 判断当前登录用户为管理员？
     */
    protected boolean isAdmin() {
        HttpSession session = request.getSession();
        User u = (User) session.getAttribute("LOGONUSER");
        System.out.println("User=" + u.getUsername());
        if (u == null) {
            return false;
        }

        if (!u.getUsername().equals("Admin"))
            return false;
        return true;
    }

    /**
     * 判断当前登录用户为管理员？
     */
    protected boolean isLogon() {
        HttpSession session = request.getSession();
        User u = (User) session.getAttribute("LOGONUSER");
        if (u == null) {
            return false;
        }
        return true;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public List<User> getList() {
        return list;
    }

    public void setList(List<User> list) {
        this.list = list;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getOldpassword() {
        return oldpassword;
    }

    public void setOldpassword(String oldpassword) {
        this.oldpassword = oldpassword;
    }
}

